package skladowisko;

import java.util.ArrayList;
import java.util.List;
import skladowisko.transport.PlanowaneDzialania;
import skladowisko.transport.TransportPrzychodzacy;
import skladowisko.transport.TransportWychodzacy;

/**
 *
 * @author Krzysiek
 */
public class Terminal
{

    private int id;
    private static int nextID = 1;
    private String nazwa = "?";
    private PlanowaneDzialania plany;
    private List<Skladowisko> skladowiska;

    //**************************************************************************
    public Terminal()
    {
        id = nextID;
        nextID++;

        skladowiska = new ArrayList<Skladowisko>();
        plany = new PlanowaneDzialania(this);
    }

    //**************************************************************************
    public boolean addSkladowisko(Skladowisko nowe)
    {
        this.skladowiska.add(nowe);

        //TODO sparwdzic czy takie skladowisko juz nie istnieje
        //ewentualnie mapa Terminalu

        return true;
    }
    //**************************************************************************

    public int ileSkladowisk()
    {
        return skladowiska.size();
    }

    public void skladuj(Kontener nowy, Lokalizacja lokalizacja)
    {
        if (lokalizacja.terminalID != this.getId())
        {
            throw new IllegalArgumentException("Nieprawidlowy numer terminalu");
        }

        for (Skladowisko skl : skladowiska)
        {
            if (skl.getId().equals(lokalizacja.skladowiskoID))
            {
                skl.skladuj(nowy, lokalizacja);
                return;
            }
        }
        throw new IllegalArgumentException("Nie znaleziono danego skladowiska");
    }

    /**
     * @return the id
     */
    public int getId()
    {
        return id;
    }

    //**************************************************************************
    public void dodajTransportPrzychodzacy(TransportPrzychodzacy transport)
    {
        this.plany.dodajTransport(transport);
    }

    //**************************************************************************
    public void dodajTransportWychodzacy(TransportWychodzacy transport)
    {
        this.plany.dodajTransport(transport);
    }

    //**************************************************************************
    public void wypuscTransportWychodzacy(TransportWychodzacy transport)
    {
        //TODO
    }
    //**************************************************************************

    public List<Skladowisko> getSkladowiska()
    {
        return this.skladowiska;
    }
    //**************************************************************************

    public PlanowaneDzialania pokazPlany()
    {
        return this.plany;
    }
    //**************************************************************************

    public int getIloscMiejsc()
    {
        int wynik = 0;

        for (Skladowisko skl : skladowiska)
        {
            wynik += skl.getIloscPol();
        }

        return wynik;
    }

    //**************************************************************************
    public void zeruj()
    {
        plany = new PlanowaneDzialania(this);
        id = nextID;
        nextID++;

        for (Skladowisko skl : skladowiska)
        {
            skl.zeruj();
        }
    }
    //**************************************************************************

    public void setNazwa(String nazwa)
    {
        this.nazwa = nazwa;
    }
    //**************************************************************************

    public String getNazwa()
    {
        return nazwa;
    }
    //**************************************************************************
}
